// stack.cpp -- Stack member functions
//#include "test_240216.h"
//
//Stack::Stack()			// create an empty stack
//{
//	top = 0;
//}
//
//bool Stack::isempty() const
//{
//	return top == 0;
//}
//
//bool Stack::isfull() const
//{
//	return top == MAX;
//}
//
//bool Stack::push(const Item& item)
//{
//	if (top < MAX)
//	{
//		items[top++] = item;
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//
//bool Stack::pop(Item& item)
//{
//	if (top > 0)
//	{
//		item = items[--top];
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//
//#include <iostream>
//#include <cctype> // or ctype.h
//
//int main()
//{
//	using namespace std;
//	Stack st;		// create an empty stack
//	char ch;
//	unsigned long po;
//	cout << "Please enter A to add a purchase order.\n"
//		<< "P to process a PO, or Q to quit.\n";
//	while (cin >> ch && toupper(ch) != 'Q')
//	{
//		while (cin.get() != '\n')
//			continue;
//		if (!isalpha(ch))
//		{
//			cout << '\a';
//			continue;
//		}
//		switch (ch)
//		{
//		case 'A':
//		case 'a': 
//			cout << "Enter a PO number to add: ";
//			cin >> po;
//			if (st.isfull())
//			{
//				cout << "stack already full\n";
//			}
//			else
//			{
//				st.push(po);
//			}
//			break;
//		case 'P':
//		case 'p':
//			if (st.isempty())
//			{
//				cout << "stack already empty\n";
//			}
//			else
//			{
//				st.pop(po);
//				cout << "PO #" << po << " popped\n";
//			}
//			break;
//		}
//		cout << "Please enter A to add a purchase order,\n"
//			<< "P to process a PO, or Q to quit.\n";
//	}
//	cout << "Bye\n";
//
//	return 0;
//}

// vect.cpp -- methods for the Vector class
//#include <cmath>
//#include "test_240216.h"		// includes <iostream>
//using std::sqrt;
//using std::sin;
//using std::cos;
//using std::atan;
//using std::atan2;
//using std::cout;
//
//namespace VECTOR
//{
//	// compute degrees in one radian
//	const double Rad_to_deg = 45.0 / atan(1.0);
//	// shoule be about 57.2957795130823
//
//	// private methods
//	// calculates magnitude from x and y
//	void Vector::set_mag()
//	{
//		mag = sqrt(x * x + y * y);
//	}
//
//	void Vector::set_ang()
//	{
//		if (x == 0.0 && y == 0.0)
//		{
//			ang = 0.0;
//		}
//		else
//		{
//			ang = atan2(y, x);
//		}
//	}
//
//	// set x from polar coordinate
//	void Vector::set_x()
//	{
//		x = mag * cos(ang);
//	}
//
//	// set y from polar coordinate
//	void Vector::set_y()
//	{
//		y = mag * sin(ang);
//	}
//
//	// public methods;
//	Vector::Vector()		// default constructor
//	{
//		x = y = mag = ang = 0.0;
//		mode = RECT;
//	}
//
//	// construct vector from rectangular coordinates if form is r
//	// (the defalut) or else from polar coordinates if form is p
//	Vector::Vector(double n1, double n2, Mode form)
//	{
//		mode = form;
//		if (form == RECT)
//		{
//			x = n1;
//			y = n2;
//			set_mag();
//			set_ang();
//		}
//		else if (form == POL)
//		{
//			mag = n1;
//			ang = n2 / Rad_to_deg;
//			set_x();
//			set_y();
//		}
//		else
//		{
//			cout << "Incorrect 3rd argument to Vector() -- ";
//			cout << "vector set to 0\n";
//			x = y = mag = ang = 0.0;
//			mode = RECT;
//		}
//	}
//
//	// RECT (the default) or else from polar coordinates if
//	// form is POL
//	void Vector::reset(double n1, double n2, Mode form)
//	{
//		mode = form;
//		if (form == RECT)
//		{
//			x = n1;
//			y = n2;
//			set_mag();
//			set_ang();
//		}
//		else if (form == POL)
//		{
//			mag = n1;
//			ang = n2 / Rad_to_deg;
//			set_x();
//			set_y();
//		}
//		else
//		{
//			cout << "Incorrect 3rd argument to Vector() -- ";
//			cout << "vector set to 0\n";
//			x = y = mag = ang = 0.0;
//			mode = RECT;
//		}
//	}
//
//	Vector::~Vector() { }		// destructor
//
//	void Vector::polar_mode()	// set to polar mode
//	{
//		mode = POL;
//	}
//
//	void Vector::rect_mode()	// set to rectangular mode
//	{
//		mode = RECT;
//	}
//
//	// operator overloading
//	// add two Vectors
//	Vector Vector::operator+(const Vector& b) const
//	{
//		return Vector(x + b.x, y + b.y);
//	}
//
//	// subtract Vector b from a
//	Vector Vector::operator-(const Vector& b) const
//	{
//		return Vector(x - b.x, y - b.y);
//	}
//
//	// reverse sign of Vector
//	Vector Vector::operator-() const
//	{
//		return Vector(-x, -y);
//	}
//
//	Vector Vector::operator*(double n) const
//	{
//		return Vector(x * n, y * n);
//	}
//
//	// friends
//	Vector operator*(double n, const Vector& a)
//	{
//		return a * n;
//	}
//
//	std::ostream& operator<<(std::ostream& os, const Vector& v)
//	{
//		if (v.mode == Vector::RECT)
//		{
//			os << "(x, y) = (" << v.x << ", " << v.y << ")";
//		}
//		else if (v.mode == Vector::POL)
//		{
//			os << "(m, a) = (" << v.mag << ", "
//				<< v.ang * Rad_to_deg << ")";
//		}
//		else
//		{
//			os << "Vector object mode is invalid";
//		}
//		return os;
//	}
//}
//
//// randwalk.cpp -- using the Vector class
//// compile with the vect.cpp file
//#include <iostream>
//#include <cstdlib>		// rand(), srand() prototypes
//#include <ctime>		// time() prototype
//
//int main()
//{
//	using namespace std;
//	using VECTOR::Vector;
//	srand(time(0));		// seed random-number generator
//	double direction;
//	Vector step;
//	Vector result(0.0, 0.0);
//	unsigned long steps = 0;
//	double target;
//	double dstep;
//	cout << "Enter target distance (q to quit): ";
//	while (cin >> target)
//	{
//		cout << "Enter step length: ";
//		if (!(cin >> dstep))
//		{
//			break;
//		}
//
//		while (result.magval() < target)
//		{
//			direction = rand() % 360;
//			step.reset(dstep, direction, Vector::POL);
//			result = result + step;
//			steps++;
//		}
//		cout << "After " << steps << " steps, the subject "
//			"has the following location:\n";
//		cout << result << endl;
//		result.polar_mode();
//		cout << " or\n" << result << endl;
//		cout << "Average outward distance per step = "
//			<< result.magval() / steps << endl;
//		steps = 0;
//		result.reset(0.0, 0.0);
//		cout << "Enter target distance (q to quit): ";
//	}
//	cout << "Bye!\n";
//	cin.clear();
//	while (cin.get() != '\n')
//	{
//		continue;
//	}
//
//	return 0;
//}